﻿// ActionScript file
package org.nickro.utils.DisplayObject{
	import flash.display.DisplayObject;
	import flash.geom.Point;
	import flash.geom.Matrix;
	
	import org.nickro.utils.MathUtil;
	public class DisplayObjectUtil
	{
		/**
	 * 対象となるDisplayObjectを、任意の点を原点として回転させま�?
	 * @param target    対象となるDisplayObject
	 * @param origin    回転の中心となるグローバル座�?
	 * @param radians   新弧度�?これは絶対値で�?
	 */
	public static function rotate(target:DisplayObject, origin:Point, radians:Number):void
	{
		var m:Matrix = target.transform.matrix;
		var x:Number = origin.x;
		var y:Number = origin.y;
		m.concat(new Matrix(1, 0, 0, 1, -x, -y));
		m.rotate(radians - MathUtil.degreesToRadians(target.rotation));
		m.concat(new Matrix(1, 0, 0, 1, x, y));
		target.transform.matrix = m;
	}

	/**
	 * 対象となるDisplayObjectを、任意の点を原点として拡大・縮小させます.
	 * @param target    対象となるDisplayObject
	 * @param origin    拡大・縮小の中心となるグローバル座標
	 * @param scaleX   新しいスケールX.これは絶対値で�?
	 * @param scaleY   新しいスケールY.これは絶対値で�?
	 */
	public static function scale(target:DisplayObject, origin:Point, scaleX:Number, scaleY:Number):void
	{
		var m:Matrix = target.transform.matrix;
		var x:Number = origin.x;
		var y:Number = origin.y;
		m.concat(new Matrix(1, 0, 0, 1, -x, -y));
		m.scale(1 / target.scaleX, 1 / target.scaleY);
		m.scale(scaleX, scaleY);
		m.concat(new Matrix(1, 0, 0, 1, x, y));
		target.transform.matrix = m;
	}
	}
}